using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._3DAnalystTools._TerrainDataset
{
    /// <summary>
    /// <para>Add Terrain Pyramid Level</para>
    /// <para>Adds one or more pyramid levels to an existing terrain dataset.</para>
    /// <para>将一个或多个金字塔级别添加到现有 terrain 数据集。</para>
    /// </summary>    
    [DisplayName("Add Terrain Pyramid Level")]
    public class AddTerrainPyramidLevel : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AddTerrainPyramidLevel()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_terrain">
        /// <para>Input Terrain</para>
        /// <para>The terrain dataset to process.</para>
        /// <para>要处理的 terrain 数据集。</para>
        /// </param>
        /// <param name="_pyramid_level_definition">
        /// <para>Pyramid Levels Definition</para>
        /// <para><xdoc>
        ///   <para>The z-tolerance or window size and its associated reference scale for each pyramid level being added to the terrain. Each pyramid level is entered as a space-delimited pair of the pyramid level resolution and reference scale (for example, "20 24000" for a window size of 20 and reference scale of 1:24000, or "1.5 10000" for a z-tolerance of 1.5 and reference scale of 1:10000). The pyramid level resolution can be provided as a floating-point value, while the reference scale must be entered as a whole number.</para>
        ///   <para>The z-tolerance value represents the maximum deviation that can occur from the elevation of the terrain at full resolution, whereas the window size value defines the area of the terrain tile used in thinning elevation points by selecting one or two points from the area based on the window size method defined during the creation of the terrain. The reference scale represents the largest map scale at which the pyramid level is enforced. When the terrain is displayed at a scale larger than this value, the next highest pyramid level is displayed.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>对于要添加到地形的每个金字塔级别，z 容差或窗口大小及其关联的参考比例。每个金字塔级别都作为一对以空间分隔的金字塔级别分辨率和参考比例输入（例如，“20 24000”表示窗口大小为 20，参考比例为 1：24000，对于 z 容差为 1.5，参考比例为 1：10000，“1.5 10000”）。金字塔级别分辨率可以作为浮点值提供，而参考比例必须作为整数输入。</para>
        ///   <para>z 容差值表示在全分辨率下可能发生的与地形高程发生的最大偏差，而窗口大小值通过根据创建地形期间定义的窗口大小方法从区域中选择一个或两个点来定义用于细化高程点的地形图块的面积。参考比例表示强制执行金字塔级别的最大地图比例。当以大于此值的比例显示地形时，将显示下一个最高的金字塔级别。</para>
        /// </xdoc></para>
        /// </param>
        public AddTerrainPyramidLevel(object _in_terrain, List<object> _pyramid_level_definition)
        {
            this._in_terrain = _in_terrain;
            this._pyramid_level_definition = _pyramid_level_definition;
        }
        public override string ToolboxName => "3D Analyst Tools";

        public override string ToolName => "Add Terrain Pyramid Level";

        public override string CallName => "3d.AddTerrainPyramidLevel";

        public override List<string> AcceptEnvironments => ["autoCommit", "workspace"];

        public override object[] ParameterInfo => [_in_terrain, _pyramid_type, _pyramid_level_definition, _derived_out_terrain];

        /// <summary>
        /// <para>Input Terrain</para>
        /// <para>The terrain dataset to process.</para>
        /// <para>要处理的 terrain 数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Terrain")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_terrain { get; set; }


        /// <summary>
        /// <para>Pyramid Type</para>
        /// <para>The pyramid type used by the terrain dataset. This parameter is not used in ArcGIS 9.3 and beyond, as its purpose is to ensure backward-compatibility with scripts and models written using ArcGIS 9.2.</para>
        /// <para>terrain 数据集使用的金字塔类型。此参数在 ArcGIS 9.3 及更高版本中不使用，因为其目的是确保与使用 ArcGIS 9.2 编写的脚本和模型向后兼容。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Pyramid Type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _pyramid_type { get; set; } = null;


        /// <summary>
        /// <para>Pyramid Levels Definition</para>
        /// <para><xdoc>
        ///   <para>The z-tolerance or window size and its associated reference scale for each pyramid level being added to the terrain. Each pyramid level is entered as a space-delimited pair of the pyramid level resolution and reference scale (for example, "20 24000" for a window size of 20 and reference scale of 1:24000, or "1.5 10000" for a z-tolerance of 1.5 and reference scale of 1:10000). The pyramid level resolution can be provided as a floating-point value, while the reference scale must be entered as a whole number.</para>
        ///   <para>The z-tolerance value represents the maximum deviation that can occur from the elevation of the terrain at full resolution, whereas the window size value defines the area of the terrain tile used in thinning elevation points by selecting one or two points from the area based on the window size method defined during the creation of the terrain. The reference scale represents the largest map scale at which the pyramid level is enforced. When the terrain is displayed at a scale larger than this value, the next highest pyramid level is displayed.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>对于要添加到地形的每个金字塔级别，z 容差或窗口大小及其关联的参考比例。每个金字塔级别都作为一对以空间分隔的金字塔级别分辨率和参考比例输入（例如，“20 24000”表示窗口大小为 20，参考比例为 1：24000，对于 z 容差为 1.5，参考比例为 1：10000，“1.5 10000”）。金字塔级别分辨率可以作为浮点值提供，而参考比例必须作为整数输入。</para>
        ///   <para>z 容差值表示在全分辨率下可能发生的与地形高程发生的最大偏差，而窗口大小值通过根据创建地形期间定义的窗口大小方法从区域中选择一个或两个点来定义用于细化高程点的地形图块的面积。参考比例表示强制执行金字塔级别的最大地图比例。当以大于此值的比例显示地形时，将显示下一个最高的金字塔级别。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Pyramid Levels Definition")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _pyramid_level_definition { get; set; }


        /// <summary>
        /// <para>Updated Input Terrain</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Input Terrain")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _derived_out_terrain { get; set; }


        public AddTerrainPyramidLevel SetEnv(int? autoCommit = null, object workspace = null)
        {
            base.SetEnv(autoCommit: autoCommit, workspace: workspace);
            return this;
        }

    }

}